package mapdemo;

import java.util.*;

public class TestDriverMap {

    public static void main(String[] args) {
        System.out.println("=======map集合=====hashmap=====空值参与排序中====");
        test01();
        System.out.println();
        System.out.println("=======map集合=====LinkedHashmap=====空值在最后====");
        test011();
        System.out.println("=======map集合=====TreeMap====不能有空值=====");
        test012();
    }

    /**
     * 使用泛型
     * map集合---TreeMap
     */
    public static void test012(){
        //创建一个hashmap实例对象
        //面向接口的编程思想
        // 指明了泛型的结合声明
        Map<String,Object> map = new TreeMap<>();
        //增加元素
        Object object = "nihuao";
        map.put("张大新","10245");
        map.put("张晓","10112");
        map.put("梨花","12304");
        map.put("王丹","45671");
        //map.put(null,"10245");
        //map.put(null,null);

        /**
         * 遍历元素
         * Map接口提供三种collection视图，允许健集，值集，或健-值映射关系集[entry]的形式查看某个映射的内容。
         * 【Map可以转换为collection集合】
         * map的遍历转换为entry键值对集合的遍历
         */

        //map的遍历转换为entry键值对集合的遍历
        Set<Map.Entry<String,Object>> set = map.entrySet();
        //此时就转换为对set集合的遍历
        Iterator<Map.Entry<String,Object>> iterator = set.iterator();

        while (iterator.hasNext()){
           //获取set集合的entry元素对象
            Map.Entry<String,Object> entry = iterator.next();
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey+"---"+objValue);
        }

        //增强相的foreach循环进行遍历
        //使用foreach遍历entryset

        System.out.println("-------------------------------------");

        //将map转换为对key集的遍历
        Set<String> set1 = map.keySet();
        //key的set集合的遍历
        for (Object obj:set1) {
            //obj是键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"---------------------"+objValue);
        }

        //将map转变为value的set集合进行遍历
        Collection collection = map.values();

    }
    /**
     * map集合----LinkedHashMap
     */
    public static  void  test011(){
        //创建一个hashmap实例对象
        //面向接口的编程思想

        Map map = new LinkedHashMap();
        //增加元素
        map.put("张大新","10245");
        map.put("张晓","10112");
        map.put("梨花","12304");
        map.put("王丹","45671");
        map.put(null,"10245");
        map.put(null,null);

        /**
         * 遍历元素
         * Map接口提供三种collection视图，允许健集，值集，或健-值映射关系集[entry]的形式查看某个映射的内容。
         * 【Map可以转换为collection集合】
         * map的遍历转换为entry键值对集合的遍历
         */

        //map的遍历转换为entry键值对集合的遍历
        Set set = map.entrySet();
        //此时就转换为对set集合的遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            //强制转换【向下塑型】
            Map.Entry entry = (Map.Entry) obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey+"---"+objValue);
        }

        //增强相的foreach循环进行遍历
        //使用foreach遍历entryset

        System.out.println("-------------------------------------");

        //将map转换为对key集的遍历
        Set set1 = map.keySet();
        //key的set集合的遍历
        for (Object obj:set1) {
            //obj是键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"---------------------"+objValue);
        }

        //将map转变为value的set集合进行遍历
        Collection collection = map.values();

    }
    /**
     * map集合---hashmap
     */
    public static void test01(){
        //创建一个hashmap实例对象
        //面向接口的编程思想

        Map map = new HashMap();
        //增加元素
        map.put("张大新","10245");
        map.put("张晓","10112");
        map.put("梨花","12304");
        map.put("王丹","45671");
        map.put(null,"10245");
        map.put(null,null);

        /**
         * 遍历元素
         * Map接口提供三种collection视图，允许健集，值集，或健-值映射关系集[entry]的形式查看某个映射的内容。
         * 【Map可以转换为collection集合】
         * map的遍历转换为entry键值对集合的遍历
         */

        //map的遍历转换为entry键值对集合的遍历
        Set set = map.entrySet();
        //此时就转换为对set集合的遍历
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            Object obj = iterator.next();
            //强制转换【向下塑型】
            Map.Entry entry = (Map.Entry) obj;
            String strKey = (String) entry.getKey();
            Object objValue = entry.getValue();
            System.out.println(strKey+"---"+objValue);
        }

        //增强相的foreach循环进行遍历
        //使用foreach遍历entryset

        System.out.println("-------------------------------------");

        //将map转换为对key集的遍历
        Set set1 = map.keySet();
        //key的set集合的遍历
        for (Object obj:set1) {
            //obj是键值对中的key的值
            Object objValue = map.get(obj);
            System.out.println(obj+"---------------------"+objValue);
        }

        //将map转变为value的set集合进行遍历
        Collection collection = map.values();

    }
}
